package com.captain.leetcode;

import java.util.*;

/**
 * @author captain
 * @Des 给定一个字符串数组，将字母异位词组合在一起。可以按任意顺序返回结果列表。
 * <p>
 * 字母异位词指字母相同，但排列不同的字符串。
 * <p>
 *  
 * <p>
 * 示例 1:
 * <p>
 * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 * 示例 2:
 * <p>
 * 输入: strs = [""]
 * 输出: [[""]]
 * 示例 3:
 * <p>
 * 输入: strs = ["a"]
 * 输出: [["a"]]
 * @Date 2021/7/24 16:01
 */
public class 字母异位词分组49 {

    public List<List<String>> groupAnagrams(String[] strs) {

        Map<String, List<String>> map = new HashMap<>();
        for (String str : strs) {
            char[] chars = str.toCharArray();
            //排序 eat tea  -> 排成 aet
            Arrays.sort(chars);
            String key = String.valueOf(chars);
            if (map.containsKey(key)) {
                map.get(key).add(str);
                continue;
            }
            List<String> valueList = new ArrayList<>();
            valueList.add(str);
            map.put(key, valueList);
        }
        return new ArrayList<>(map.values());
    }
}
